// 更可读。

#include <bits/stdc++.h>
using namespace std;

 

void solve() {
  int q;
  cin >> q;

  stack<int> sk1; // 存储每一次操作后的 x 的值，栈顶即当前 x
  stack<int> sk2; // 存储 sk1 的前缀最小值 mi，栈顶即当前 mi
  sk1.push(0);    // x 初始值为 0
  sk2.push(0);

  while (q--) {
    int op;
    cin >> op;
    if (op == 1) {
      char c;
      cin >> c;
      if (c == '(') {
        int x = sk1.top() + 1; // x = x + 1  前缀和加1
        sk1.push(x);
        sk2.push(min(sk2.top(), x));
      } else {
        int x = sk1.top() - 1; // x = x - 1   前缀和减1
        sk1.push(x);
        sk2.push(min(sk2.top(), x));  
      }
    } else {
      sk1.pop();
      sk2.pop();
    }


    if (sk1.top() == 0 && sk2.top() == 0) // x == 0 && mi == 0
      cout << "Yes\n";
    else
      cout << "No\n";
  }
}
int main() { solve(); }